package com.sybil.spa.controlador;

import com.sybil.spa.dominio.Causa;
import com.sybil.spa.dominio.TipoSolicitud;
import com.sybil.spa.servicio.CausaServicio;
import com.sybil.spa.servicio.TipoSolicitudServicio;
import java.util.HashMap;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("/catalogos")
public class CatalogoControlador {

   @Autowired
   private TipoSolicitudServicio tipoSolicitudServicio;
   @Autowired
   private CausaServicio causaServicio;

   @RequestMapping(method = RequestMethod.GET)
   public String todos() {
      return "catalogos/todos";
   }

   @RequestMapping(value = "/causas", method = RequestMethod.GET)
   public String causaLista(Model model) {
      model.addAttribute("causas", causaServicio.obtenerCausas());
      return "flujo/causa/listado";
   }

   @RequestMapping(value = "/causas/nueva", method = RequestMethod.GET)
   public String formularioCausaNueva(Model model) {
      model.addAttribute(new Causa());
      return "flujo/causa/nueva";
   }

   @RequestMapping(value = "/causas/nueva", method = RequestMethod.POST)
   public String causaNueva(@Valid @ModelAttribute Causa causa, BindingResult result) {
      if (result.hasErrors()) {
         return "flujo/causa/nueva";
      } else {
         HashMap<String, Object> info = (HashMap<String, Object>) SecurityContextHolder.getContext().getAuthentication().getDetails();
         String usuarioActual = (String) info.get("clave");
         causa.setUsuarioCreo(usuarioActual);
         causaServicio.guardar(causa);
         return "redirect:/catalogos/causas";
      }
   }

   @RequestMapping(value = "/causas/edit", params = "cc", method = RequestMethod.GET)
   public String formularioCausaEditar(@RequestParam("cc") String claveCausa, Model model) {
      model.addAttribute(causaServicio.obtenerCausa(claveCausa));
      return "flujo/causa/editar";
   }

   @RequestMapping(value = "/causas/edit", params = "cc", method = RequestMethod.POST)
   public String causaEditar(@Valid @ModelAttribute Causa causa, BindingResult result) {
      if (result.hasErrors()) {
         return "flujo/causa/editar";
      } else {
         HashMap<String, Object> info = (HashMap<String, Object>) SecurityContextHolder.getContext().getAuthentication().getDetails();
         String usuarioActual = (String) info.get("clave");
         causa.setUsuarioModif(usuarioActual);
         causaServicio.editar(causa);
         return "redirect:/catalogos/causas";
      }
   }

   @RequestMapping(value = "/causas/elim", params = "cc", method = RequestMethod.GET)
   public String causaEliminar(@RequestParam("cc") String claveCausa) {
      causaServicio.eliminarCausa(claveCausa);
      return "redirect:/catalogos/causas";
   }

   @RequestMapping(value = "/causas/inac", params = "cc", method = RequestMethod.GET)
   public String causaInactivar(@RequestParam("cc") String claveCausa) {
      HashMap<String, Object> info = (HashMap<String, Object>) SecurityContextHolder.getContext().getAuthentication().getDetails();
      String usuarioActual = (String) info.get("clave");
      causaServicio.inactivarCausa(claveCausa, usuarioActual);
      return "redirect:/catalogos/causas";
   }

   @RequestMapping(value = "/tipossolicitud", method = RequestMethod.GET)
   public String tiposSolicitudLista(Model model) {
      model.addAttribute("tipossolicitud", tipoSolicitudServicio.obtenerTiposSolicitud());
      return "catalogos/tipossolicitud/listado";
   }

   @RequestMapping(value = "/tipossolicitud/nuevo", method = RequestMethod.GET)
   public String formularioTipoSolicitudNuevo(Model model) {
      model.addAttribute(new TipoSolicitud());
      return "catalogos/tipossolicitud/nuevo";
   }

   @RequestMapping(value = "/tipossolicitud/nuevo", method = RequestMethod.POST)
   public String tipoSolicitudNuevo(@Valid @ModelAttribute TipoSolicitud tipoSolicitud,
           BindingResult result) {
      if (result.hasErrors()) {
         return "catalogos/tipossolicitud/nuevo";
      } else {
         HashMap<String, Object> info = (HashMap<String, Object>) SecurityContextHolder.getContext().getAuthentication().getDetails();
         String usuarioActual = (String) info.get("clave");
         tipoSolicitud.setUsuarioCreo(usuarioActual);
         tipoSolicitudServicio.guardar(tipoSolicitud);
         return "redirect:/catalogos/tipossolicitud";
      }
   }

   @RequestMapping(value = "/tipossolicitud/edit", params = "ct", method = RequestMethod.GET)
   public String formularioTipoSolicitudEditar(@RequestParam("ct") String claveTipo, Model model) {
      model.addAttribute(tipoSolicitudServicio.obtenerTipoSolicitud(claveTipo));
      return "catalogos/tipossolicitud/editar";
   }

   @RequestMapping(value = "/tipossolicitud/edit", params = "ct", method = RequestMethod.POST)
   public String tipoSolicitudEditar(@Valid @ModelAttribute TipoSolicitud tipoSolicitud, 
           BindingResult result) {
      if (result.hasErrors()) {
         return "catalogos/tipossolicitud/editar";
      } else {
         HashMap<String, Object> info = (HashMap<String, Object>) SecurityContextHolder.getContext().getAuthentication().getDetails();
         String usuarioActual = (String) info.get("clave");
         tipoSolicitud.setUsuarioModif(usuarioActual);
         tipoSolicitudServicio.editar(tipoSolicitud);
         return "redirect:/catalogos/tipossolicitud";
      }
   }

   @RequestMapping(value = "/tipossolicitud/elim", params = "ct", method = RequestMethod.GET)
   public String tipoSolicitudEliminar(@RequestParam("ct") String claveTipo) {
      tipoSolicitudServicio.eliminar(claveTipo);
      return "redirect:/catalogos/tipossolicitud";
   }

   @RequestMapping(value = "/tipossolicitud/inac", params = "ct", method = RequestMethod.GET)
   public String tipoSolicitudInactivar(@RequestParam("ct") String claveTipo) {
      HashMap<String, Object> info = (HashMap<String, Object>) SecurityContextHolder.getContext().getAuthentication().getDetails();
      String usuarioActual = (String) info.get("clave");
      tipoSolicitudServicio.inactivar(claveTipo, usuarioActual);
      return "redirect:/catalogos/tipossolicitud";
   }
}
